package fiuba.algo3.mapa;

import org.jdom2.Element;

public class Esquina {
	PosicionMapa coordenada;
	Calle calleNorte;
	Calle calleSur;
	Calle calleEste;
	Calle calleOeste;
	Boolean esMeta;
	Boolean esLargada;

	public Esquina() {
		esLargada = false;
		esMeta = false;
	}

	public void setCalleNorte(Calle unaCalle) {
		this.calleNorte = unaCalle;
	}

	public void setCalleSur(Calle unaCalle) {
		this.calleSur = unaCalle;
	}

	public void setCalleEste(Calle unaCalle) {
		this.calleEste = unaCalle;
	}

	public void setCalleOeste(Calle unaCalle) {
		this.calleOeste = unaCalle;
	}

	public void setCoordenada(PosicionMapa unaPos) {
		this.coordenada = unaPos;
	}

	public Calle getCalleNorte(){
		return this.calleNorte;
	}

	public Calle getCalleSur(){
		return this.calleSur;
	}

	public Calle getCalleEste(){
		return this.calleEste;
	}

	public Calle getCalleOeste(){
		return this.calleOeste;
	}

	public PosicionMapa getCoordenada() {
		return this.coordenada;
	}

	public int getCoordenadaX() {
		return this.coordenada.getCoordenadaX();
	}

	public int getCoordenadaY() {
		return this.coordenada.getCoordenadaY();
	}

	public Boolean esMeta() {
		return this.esMeta;
	}

	public void setComoMeta() {
		this.esMeta = true;
	}

	public Boolean esLargada() {
		return this.esLargada;
	}

	public void setComoLargada() {
		this.esLargada = true;
	}

	public int calcularDistanciaAEsquina(Esquina otraEsquina) {
		return (this.coordenada.calcularMinimoCaminoEnCuadrasHasta(otraEsquina.getCoordenada()));
	}

	public boolean tieneCalleNorte() {
		return (this.calleNorte != null);
	}

	public boolean tieneCalleSur() {
		return (this.calleSur != null);
	}

	public boolean tieneCalleEste() {
		return (this.calleEste != null);
	}

	public boolean tieneCalleOeste() {
		return (this.calleOeste != null);
	}
	
	public Element serializar(){
		Element nodoEsquina = new Element("Esquina");
		nodoEsquina.addContent(this.coordenada.serializar());
		return nodoEsquina;
	}
	
	public Esquina(Element nodoEsquina){
		this.coordenada = new PosicionMapa(nodoEsquina.getChild("PosicionEnMapa"));
	}
}
